' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2024.09.09.00.00]) on 2024.09.12 at 03:39 (Coordinated Universal Time)
' This program by Charlie Veniot is a port and mod
' of the "Lightning Globe" QB64 program by SMcNeill
' (https://qb64phoenix.com/forum/showthread.php?tid=3022&pid=28211#pid28211)
_INITAUDIO
_SNDWAVE "sawtooth"
midx% = 640 : midy% = 480
SCREEN _NEWIMAGE( midx% *2 + 1, midy% * 2 + 1, 27 )
DIM Kolor AS ULONG
CONST LevelOfVariance = 5 'Change this value to have fun with the strength of the "draw" to target.
DO
CLS
CIRCLE( midx%, midy% ), 5, &HAAAAFF, , , ,F
IF _MOUSEBUTTON THEN
SOUND 30,0.1
StartX = midx%: StartY = midy%: EndX = _MOUSEX: EndY = _MOUSEY
c% = INT( RND * 255 )
Kolor = _RGB( c%, c%, 255 )
COLOR Kolor
DO WHILE StartX <> EndX OR StartY <> EndY
CoinToss = RND * 300 'The strength of "draw" which pulls the lightning to the target.
IF CoinToss < LevelOfVariance THEN 'Higher values meander less and go directly to the target.
XChange = Sgn(EndX - StartX) '-1,0,1, drawn always towards the mouse
YChange = Sgn(EndY - StartY)
ELSE
XChange = Int(Rnd * 3) - 1 '-1, 0, or 1, drawn in a random direction to let the lightning wander
YChange = Int(Rnd * 3) - 1
END IF
StartX = StartX + XChange
StartY = StartY + YChange
PSet (StartX, StartY), Kolor
LOOP
END IF
SLEEP 0.01
LOOP